package database

import (
	"time"

	"gorm.io/gorm"
)

// Base 包含所有模型共有的字段
type Base struct {
	ID        uint           `gorm:"primarykey" json:"id"`
	CreatedAt time.Time      `json:"created_at"`
	UpdatedAt time.Time      `json:"updated_at"`
	DeletedAt gorm.DeletedAt `gorm:"index" json:"-"`
}

// Knowledge 知识条目模型
type Knowledge struct {
	Base
	Title       string   `gorm:"size:255;not null" json:"title"`
	Content     string   `gorm:"type:text" json:"content"`
	CategoryID  uint     `json:"category_id"`
	Category    Category `gorm:"foreignKey:CategoryID" json:"category"`
	Tags        []Tag    `gorm:"many2many:knowledge_tags;" json:"tags"`
	Attachments string   `gorm:"type:text" json:"attachments"` // 存储附件路径，以JSON格式
	Source      string   `gorm:"size:255" json:"source"`       // 知识来源
	Importance  int      `gorm:"default:0" json:"importance"`  // 重要性评分
	Views       int      `gorm:"default:0" json:"views"`       // 查看次数
}

// Category 分类模型
type Category struct {
	Base
	Name        string      `gorm:"size:100;not null;uniqueIndex" json:"name"`
	Description string      `gorm:"size:255" json:"description"`
	ParentID    *uint       `json:"parent_id"`                               // 父分类ID，允许为空
	Parent      *Category   `gorm:"foreignKey:ParentID" json:"parent"`       // 父分类
	Children    []Category  `gorm:"foreignKey:ParentID" json:"children"`     // 子分类
	Knowledges  []Knowledge `gorm:"foreignKey:CategoryID" json:"knowledges"` // 该分类下的知识条目
}

// Tag 标签模型
type Tag struct {
	Base
	Name       string      `gorm:"size:50;not null;uniqueIndex" json:"name"`
	Knowledges []Knowledge `gorm:"many2many:knowledge_tags;" json:"knowledges"`
}
